name_list = ['张三', '李四', '王五']
print(name_list)
print(type(name_list))


name_list = ['张三', 18, '王五']
print(name_list)
print(type(name_list))

# list的遍历
name_list = ['张三', '李四', '王五']
# 顺序遍历
print(name_list[0])
print(name_list[1])
print(name_list[2])
# IndexError: list index out of range
# print(name_list[3])

# 倒序遍历
print(name_list[-1])
print(name_list[-2])
print(name_list[-3])
# IndexError: list index out of range
# print(name_list[-4])

# 嵌套list的遍历
name_list = [['张一', '张二', '张三'], ['李一', '李二', '李三']]
print(name_list[0][0])
print(name_list[0][1])
print(name_list[0][2])

print(name_list[1][0])
print(name_list[1][1])
print(name_list[1][2])

# list中方法的使用
name_list = ['张三', '李四', '王五']
# index(元素值)
print(name_list.index('张三'))
print(name_list.index('李四'))

name_list[0] = '张二'
print(name_list)

# insert 指定索引出插入值
name_list.insert(1, '李逵')
print(name_list)

# append 末尾追加
name_list.append("赵钱")
print(name_list)

# extend 末尾追加其他的数据容器
other_list = ['牛', '马', '牛马']
name_list.extend(other_list)
print(name_list)

# del 删除list中的元素
del name_list[-1]
print(name_list)

# pop 删除list中的元素
name_list.pop(-1)
print(name_list)

# remove删除第一个匹配到的元素
name_list = ['张三', '李四', '张三']
name_list.remove('张三')
print(name_list)

# clear 清除list中的元素
name_list.clear()
print(name_list)

# count 统计某个元素的个数
name_list = ['张三', '李四', '张三']
print(name_list.count('张三'))

# len 统计list中元素个数
print(len(name_list))


"""
数据容器之元组（tuple）
"""
t1 = ("张三", 18, ['football', 'music'])
print(f"t1的类型为：{type(t1)}")
print(f"年龄下标位置为：{t1.index(18)}")
print(f"学生姓名为：{t1[0]}")
print(t1)
# 删除football
del t1[2][0]
print(t1)
t1[2].append("coding")
print(t1)

"""
数据容器之字符串（str）
"""
s1 = "ztk is good ztk"
print(f"第2个字母是什么：{s1[1]}")
print(f"第一个ztk在什么位置：{s1.index('ztk')}")
print(f"第一个is在什么位置：{s1.index('is')}")
s2 = s1.replace("ztk", "ktz")
print(f"原字符串：{s1}, replace(ztk)后的字符串为：{s2}")

# 字符串的分割 split
s2 = s1.split(" ")
print(f"split后的类型为：{type(s2)}")
print(s2)

# 移除首位空格或指定字符strip
s1 = "  ztk is good ztk  "
s2 = s1.strip()
print(f"strip前：{s1}, strip后：{s2}")

"""
" 18ztk is 18 good ztk18 "首尾存在空格，则，只移除空格
"18ztk is 18 good ztk81" 首位不存在空格，则移除首位的1 和 8
注意：不是直接将18移除，而是移除1 和 8
"""
s1 = " 18ztk is 18 good ztk18 "
print(f"strip(18)后的结果：{s1.strip('18')}")

s1 = "18ztk is 18 good ztk81"
print(f"strip(18)后的结果：{s1.strip('18')}")

# count计数
print(f"ztk一共出现过多少次{s1.count('ztk')}");

# len统计长度
print(f"s1的长度为：{len(s1)}")


"""
数据容器的切片操作
数据容器[开始下标:结束下标:步长]
开始下标：为0时，可以省略
结束下标：为最后一个时，可以省略
步长：为1时可以省略
    正数：从前往后取
    负数：从后往前取（大下标在前，小下标在后）
    my_list[10:1:-1]
"""
# str的切片
s1 = "abcdefgh"
# 以步长为1，取下标[1,5)的数据
s2 = s1[1:5:]
print(f"切片前：{s1}，切片后：{s2}")

# 以步长为1，取s1中的所有数据
s2 = s1[::]
print(s2)

# 以步长为1，倒序取s1中所有数据
s2 = s1[::-1]
print(s2)

# 以步长为1，倒序取下标为1到下标为8的数据，结果为空，方式错误
s2 = s1[1:8:-1]
print(f"s1[1:8:-1]的结果为：{s2}")
# 倒序 + 指定下标的正确书写方式
s2 = s1[8:1:-1]
print(f"s1[8:1:-1]的结果为：{s2}")

# list的切片
list1 = [1, 2, 3, 4, 5]
list2 = list1[1:5:2]
print(list1)
print(list2)

# tuple元组的切片
t1 = (1, 2, 3, 4, 5)
t2 = t1[1:4:]
print(t2)




str = "娃哈哈，之黑马程序员，是个哈地方"
s2 = str[::-1]
print(s2)

s3 = "方地哈个是，员序程马黑之，哈哈娃"
s4 = s3[10:5:-1]
print(s4)


list1 = list()
print(type(list1))
# s1 = str() 不可以这样定义 s1 = "xxx" 通过这种方式
print(type(s1))
t1 = tuple()
print(type(t1))






















